package top.btcmarket.gateway.config;

import java.util.concurrent.TimeUnit;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

import top.btcmarket.common.utils.JwtToken;

@Component
public class RedisTokenManager {

	@Autowired
	private RedisTemplate<String, String> redis;

	public void cacheToken(String token) {
		try {
			if (StringUtils.isNotEmpty(token)) {

				String redisKey = JwtToken.getTokenRedisKeyByToken(token);
				
				String cacheToken = (String) redis.boundValueOps(redisKey).get();
				if (cacheToken == null ) {
					Long expireTime = JwtToken.getTokenDiffTime(token);
					if (StringUtils.isNotEmpty(redisKey) && expireTime != null && expireTime > 0) {
						// 存储到 redis 并设置过期时间
						redis.boundValueOps(redisKey).set(token, expireTime, TimeUnit.SECONDS);
					}
				}
			}
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}
	}

	public boolean checkToken(String token) {
		if (StringUtils.isEmpty(token)) {
			return false;
		}
		String redisKey = JwtToken.getTokenRedisKeyByToken(token);

		String cacheToken = (String) redis.boundValueOps(redisKey).get();
		// 获取到了 token 说明 没有过期
		if (cacheToken == null || !token.equals(cacheToken)) {
			return false;
		}
		// 调用要验证 时间 。。。 ， 过期了就会报错。
//		Long expireTime = JwtToken.getTokenDiffTime(token);
		
		
		System.out.println("token 时间延长: "+JwtToken.expiration+",秒");
		// 如果验证成功，说明此用户进行了一次有效操作，延长 token 的过期时间
		redis.boundValueOps(redisKey).expire(JwtToken.expiration, TimeUnit.SECONDS);
		return true;
	}

	public void deleteToken(String token) {
		String redisKey = JwtToken.getTokenRedisKeyByToken(token);
		redis.delete(redisKey);
	}
}
